#ifndef XPACK_COMMON_H
#define XPACK_COMMON_H
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QDebug>

#include "xpack/json.h"
// #include "trdpart/xpack/json_decoder.h"
// #include "trdpart/xpack/json_encoder.h"

class StructFormat
{
public:
    StructFormat(){}
    ~StructFormat(){}
    template<typename T>
    static void Format(QJsonObject obj,T &config){
        qDebug()<<__FUNCTION__<< obj;
        QJsonDocument doc(obj);
        xpack::json::decode(doc.toJson().toStdString(),config);
    }
    template<typename T>
    static QJsonObject toJson(T config)
    {
        QJsonObject obj;
        std::string js=xpack::json::encode( config);
        QJsonParseError err;
        QString src=QString::fromStdString(js);
        QJsonDocument doc = QJsonDocument::fromJson(src.toUtf8(), &err);
        if (doc.isNull() || err.error != QJsonParseError::NoError)
        {
            qDebug() << "QJsonDocument is error" << err.errorString() << src;
            return obj;
        }
        if (!doc.isObject())
        {
            qDebug() << "QJsonDocument is isObject false";
            return obj;
        }
        return doc.object();
    }

    template<typename T>
    static QString toJsonString(T config)
    {
        QJsonObject obj= toJson(config);
        QJsonDocument doc(obj);
        return doc.toJson();
    }
};

#endif // XPACK_COMMON_H
